Skip to content

Latest commit

 

History

History

01.03.String to URL

commentsdifficultyedit_url
true
简单

English Version

题目描述

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

示例1:

 输入:"Mr John Smith ", 13  输出:"Mr%20John%20Smith" 

示例2:

 输入:" ", 5  输出:"%20%20%20%20%20" 

提示:

  1. 字符串长度在[0, 500000]范围内。

解法

方法一:使用 replace() 函数

直接利用 replace 将所有 替换为 %20

时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串长度。

Python3

classSolution: defreplaceSpaces(self, S: str, length: int) ->str: returnS[:length].replace(' ', '%20')

TypeScript

functionreplaceSpaces(S: string,length: number): string{returnS.slice(0,length).replace(/\s/g,'%20');}

Rust

implSolution{pubfnreplace_spaces(s:String,length:i32) -> String{ s[..length asusize].replace(' ',"%20")}}

JavaScript

/** * @param {string} S * @param {number} length * @return {string} */varreplaceSpaces=function(S,length){returnencodeURI(S.substring(0,length));};

Swift

classSolution{func replaceSpaces(_ S:String, _ length:Int)->String{letsubstring=S.prefix(length)varresult=""forcharacterin substring {if character ==""{ result +="%20"}else{ result.append(character)}}return result }}

方法二:模拟

遍历字符串每个字符 $c$,遇到空格则将 %20 添加到结果中,否则添加 $c$

时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串长度。

Python3

classSolution: defreplaceSpaces(self, S: str, length: int) ->str: return''.join(['%20'ifc==' 'elsecforcinS[:length]])

Java

classSolution { publicStringreplaceSpaces(StringS, intlength) { char[] cs = S.toCharArray(); intj = cs.length; for (inti = length - 1; i >= 0; --i) { if (cs[i] == ' ') { cs[--j] = '0'; cs[--j] = '2'; cs[--j] = '%'; } else { cs[--j] = cs[i]; } } returnnewString(cs, j, cs.length - j); } }

Go

funcreplaceSpaces(Sstring, lengthint) string { // return url.PathEscape(S[:length])j:=len(S) b:= []byte(S) fori:=length-1; i>=0; i-- { ifb[i] ==' ' { b[j-1] ='0'b[j-2] ='2'b[j-3] ='%'j-=3 } else { b[j-1] =b[i] j-- } } returnstring(b[j:]) }

Rust

implSolution{pubfnreplace_spaces(s:String,length:i32) -> String{ s.chars().take(length asusize).map(|c| {if c == ' '{"%20".to_string()}else{ c.to_string()}}).collect()}}
close